package zsj.androidknife.utils;

/**
 * Created by Administrator on 2016/4/19 0019.
 */
public interface IThreadUtils {
    /**
     *  执行简单的后台任务和UI任务,
     *  uiAction将在backgroundAction执行完毕之后被调用，
     *  如果想要在两者之间传递参数，可以使用公共变量，
     *  但是要自己控制线程安全。
     * @param backgroundAction 在工作线程执行的操作
     * @param uiAction  在UI线程执行的操作
     */
    void startSimpleBackgroundTask(SimpleBackgroundAction backgroundAction,SimpleUiAction uiAction);

    /**
     * 可以执行有传入参数，有返回值的任务。
     * backgroundAction执行完毕之后将有返回值，
     * 并把这个值传入uiAction的doInUi()方法中，之后执行doInUi()方法。
     * @param backgroundAction 在工作线程执行的操作
     * @param uiAction 在UI线程执行的操作
     * @param param 给doInBackground()传入的参数
     * @param <P> 给doInBackground()传入的参数的类型
     * @param <R> doInBackground()返回的类型，也是传入doInUi()的参数类型
     */
    <P,R> void startBackgroundTask(BackgroundAction<P,R> backgroundAction,UiAction<R> uiAction,P param);

    void startSimpleBackgroundTask(SimpleBackgroundAction backgroundAction);
}
